// 摄影天气查看的JavaScript代码
document.addEventListener('DOMContentLoaded', () => {
    // 初始化Feather图标
    feather.replace();
    
    // 设置默认日期为今天
    const today = new Date();
    const dateInput = document.getElementById('date');
    dateInput.valueAsDate = today;
    
    // 天气代码映射到天气图标
    const weatherCodeMap = {
        '0': 'wi-day-sunny',           // 晴天
        '1': 'wi-day-sunny-overcast',  // 多云
        '2': 'wi-day-cloudy',          // 阴天
        '3': 'wi-cloudy',              // 阴
        '4': 'wi-day-cloudy',          // 多云
        '5': 'wi-day-fog',             // 雾
        '6': 'wi-fog',                 // 雾
        '7': 'wi-day-showers',         // 小雨
        '8': 'wi-day-rain',            // 中雨
        '9': 'wi-rain',                // 大雨
        '10': 'wi-thunderstorm',       // 雷阵雨
        '11': 'wi-storm-showers',      // 暴雨
        '13': 'wi-snow',               // 雪
        '14': 'wi-day-snow',           // 小雪
        '15': 'wi-snow',               // 中雪
        '16': 'wi-snow-wind',          // 大雪
        '17': 'wi-hail',               // 冰雹
        '18': 'wi-sleet',              // 雨夹雪
        '19': 'wi-dust',               // 沙尘暴
        '20': 'wi-day-haze',           // 雾霾
        '21': 'wi-raindrops',          // 小到中雨
        '22': 'wi-rain',               // 中到大雨
        '23': 'wi-rain-wind',          // 大到暴雨
        '24': 'wi-snow',               // 小到中雪
        '25': 'wi-snow-wind',          // 中到大雪
        '26': 'wi-snowflake-cold',     // 大到暴雪
        '27': 'wi-sandstorm',          // 浮尘
        '28': 'wi-sandstorm',          // 扬沙
        '29': 'wi-sandstorm',          // 强沙尘暴
        '30': 'wi-fog',                // 雾
        '31': 'wi-fog',                // 霾
        '53': 'wi-hail',               // 冻雨
    };
    
    // 天气摄影建议
    const weatherSuggestions = {
        '晴天': '晴天适合大多数摄影场景，但光线较强，注意使用偏振镜减少反光，或在黄金时段拍摄以获得柔和光线。',
        '多云': '多云天气是摄影的理想条件，云层可以散射阳光，提供柔和均匀的光线，减少阴影对比度，特别适合人像和风景摄影。',
        '阴天': '阴天提供柔和的漫射光，非常适合人像摄影和色彩饱和的场景。可以尝试捕捉云层的纹理和层次感。',
        '小雨': '雨天可以拍摄雨滴、水面反射等特殊效果，注意保护设备防水，可以尝试捕捉雨后的清新空气和湿润环境。',
        '中雨': '雨天拍摄需要注意设备防水，可以尝试捕捉雨滴、水面反射等特殊效果。',
        '大雨': '大雨天气拍摄有挑战性，建议使用防水设备或在室内拍摄雨景。雨后的光线通常很柔和，适合风景摄影。',
        '雷阵雨': '雷雨天气可以尝试捕捉闪电，但需要注意安全。使用三脚架和长曝光，在安全的室内或遮蔽处拍摄。',
        '暴雨': '暴雨天气不建议户外拍摄，可以在安全的室内通过窗户拍摄雨景。',
        '雾': '雾天是拍摄神秘氛围照片的绝佳时机，增加景深感和层次感。适合风景和建筑摄影，注意曝光补偿以获得正确曝光。',
        '雪': '雪景摄影需要注意曝光补偿（通常+1到+2档），防止雪被曝光为灰色。寒冷天气下注意保暖和电池保护。',
        '沙尘暴': '沙尘天气不适合户外拍摄，注意保护设备免受沙尘侵害。',
        '雾霾': '雾霾天气光线较为柔和，但空气质量差，不建议长时间户外拍摄。'
    };
    
        // 存储选中的城市ID
    let selectedLocationId = null;
    
    // 搜索城市
    document.getElementById('search-location').addEventListener('click', () => {
        const query = document.getElementById('location').value.trim();
        if (!query) {
            alert("请输入地点名称");
            return;
        }
        
        // 重置选中的城市ID
        selectedLocationId = null;
        
        // 显示加载状态
        const resultsContainer = document.getElementById('location-results');
        const resultsList = document.getElementById('location-results-list');
        resultsList.innerHTML = '<div class="text-center p-2"><div class="spinner-border spinner-border-sm text-primary" role="status"></div> 搜索中...</div>';
        resultsContainer.classList.remove('d-none');
        
        // 调用城市搜索API
        fetch(`/api/weather/search?q=${encodeURIComponent(query)}`)
            .then(response => {
                if (!response.ok) {
                    throw new Error('网络响应不正常');
                }
                return response.json();
            })
            .then(data => {
                resultsList.innerHTML = '';
                
                if (data.error) {
                    resultsList.innerHTML = `<div class="list-group-item text-danger">搜索出错: ${data.error}</div>`;
                    return;
                }
                
                if (!data.results || data.results.length === 0) {
                    resultsList.innerHTML = '<div class="list-group-item">未找到匹配的城市，请尝试其他关键词</div>';
                    return;
                }
                
                // 显示搜索结果
                data.results.forEach(location => {
                    const item = document.createElement('button');
                    item.type = 'button';
                    item.className = 'list-group-item list-group-item-action';
                    item.innerHTML = `
                        <div class="d-flex justify-content-between align-items-center">
                            <div>
                                <strong>${location.name}</strong>
                                <small class="d-block text-muted">${location.path}</small>
                            </div>
                            <span class="badge bg-primary rounded-pill">${location.country}</span>
                        </div>
                    `;
                    
                    // 点击选择城市
                    item.addEventListener('click', () => {
                        document.getElementById('location').value = location.name;
                        selectedLocationId = location.id;
                        resultsContainer.classList.add('d-none');
                    });
                    
                    resultsList.appendChild(item);
                });
            })
            .catch(error => {
                console.error('搜索城市失败:', error);
                resultsList.innerHTML = `<div class="list-group-item text-danger">搜索失败: ${error.message}</div>`;
            });
    });
    
    // 使用当前位置
    document.getElementById('use-location').addEventListener('click', () => {
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(
                (position) => {
                    // 获取经纬度
                    const lat = position.coords.latitude;
                    const lon = position.coords.longitude;
                    const coordString = `${lat.toFixed(4)}:${lon.toFixed(4)}`;
                    
                    // 使用经纬度搜索城市
                    document.getElementById('location').value = coordString;
                    // 自动触发搜索
                    document.getElementById('search-location').click();
                },
                (error) => {
                    console.error("获取位置失败:", error);
                    alert("无法获取您的位置，请手动输入地点。");
                }
            );
        } else {
            alert("您的浏览器不支持地理位置功能，请手动输入地点。");
        }
    });
    
    // 监听位置输入框的回车事件
    document.getElementById('location').addEventListener('keypress', (e) => {
        if (e.key === 'Enter') {
            e.preventDefault();
            document.getElementById('search-location').click();
        }
    });
    
    // 查询天气
    document.getElementById('check-weather').addEventListener('click', () => {
        let location = document.getElementById('location').value;
        const date = document.getElementById('date').value;
        
        if (!location) {
            alert("请输入地点");
            return;
        }
        
        // 如果有选中的城市ID，优先使用ID进行查询
        if (selectedLocationId) {
            location = selectedLocationId;
        }
        
        // 显示加载状态
        document.getElementById('weather-loading').classList.remove('d-none');
        document.getElementById('weather-result').classList.add('d-none');
        document.getElementById('weather-error').classList.add('d-none');
        
        // 获取实时天气数据
        fetch(`/api/weather/now?location=${encodeURIComponent(location)}`)
            .then(response => {
                if (!response.ok) {
                    throw new Error('网络响应不正常');
                }
                return response.json();
            })
            .then(nowData => {
                // 获取未来5天天气预报
                return fetch(`/api/weather/forecast?location=${encodeURIComponent(location)}`)
                    .then(response => {
                        if (!response.ok) {
                            throw new Error('网络响应不正常');
                        }
                        return response.json();
                    })
                    .then(forecastData => {
                        return { hourlyData: nowData, forecastData };
                    });
            })
            .then(data => {
                // 隐藏加载状态
                document.getElementById('weather-loading').classList.add('d-none');
                
                // 处理当前天气数据（使用实时天气数据）
                const currentWeather = data.hourlyData.results[0].now;
                const weatherLocation = data.hourlyData.results[0].location;
                
                // 获取天气代码对应的图标
                const weatherCode = currentWeather.code;
                const weatherIcon = weatherCodeMap[weatherCode] || 'wi-day-sunny';
                const weatherDesc = currentWeather.text;
                
                // 计算日出日落时间（使用SunCalc库）
                // 使用API返回的位置坐标
                const selectedDate = new Date(date);
                // 这里假设API返回的timezone_offset格式为"+08:00"这样的字符串
                const timezoneOffset = weatherLocation.timezone_offset;
                // 提取小时和分钟
                const offsetHours = parseInt(timezoneOffset.substring(1, 3));
                const offsetMinutes = parseInt(timezoneOffset.substring(4, 6));
                // 根据正负号设置偏移
                const offsetMultiplier = timezoneOffset.charAt(0) === '+' ? 1 : -1;
                // 设置日期对象的时区偏移
                selectedDate.setHours(selectedDate.getHours() + offsetMultiplier * offsetHours);
                selectedDate.setMinutes(selectedDate.getMinutes() + offsetMultiplier * offsetMinutes);
                
                // 使用API返回的位置信息计算日出日落时间
                const times = SunCalc.getTimes(
                    selectedDate, 
                    parseFloat(weatherLocation.latitude || 39.9042), 
                    parseFloat(weatherLocation.longitude || 116.4074)
                );
                
                // 格式化时间
                const formatTime = (date) => {
                    return date.toLocaleTimeString('zh-CN', { hour: '2-digit', minute: '2-digit' });
                };
                
                // 计算黄金时刻（日出前后和日落前后各一小时）
                const morningGoldenStart = new Date(times.sunrise);
                morningGoldenStart.setMinutes(morningGoldenStart.getMinutes() - 30);
                
                const morningGoldenEnd = new Date(times.sunrise);
                morningGoldenEnd.setHours(morningGoldenEnd.getHours() + 1);
                
                const eveningGoldenStart = new Date(times.sunset);
                eveningGoldenStart.setHours(eveningGoldenStart.getHours() - 1);
                
                const eveningGoldenEnd = new Date(times.sunset);
                eveningGoldenEnd.setMinutes(eveningGoldenEnd.getMinutes() + 30);
                
                // 获取摄影建议
                const suggestion = weatherSuggestions[weatherDesc] || 
                    '根据当前天气情况，建议选择适合的拍摄时间和设备，注意保护相机设备。';
                
                // 更新UI
                document.getElementById('weather-icon').className = `wi ${weatherIcon}`;
                document.getElementById('weather-temp').textContent = `${currentWeather.temperature}°C`;
                document.getElementById('weather-desc').textContent = weatherDesc;
                document.getElementById('sunrise-time').textContent = formatTime(times.sunrise);
                document.getElementById('sunset-time').textContent = formatTime(times.sunset);
                document.getElementById('wind-speed').textContent = `${currentWeather.wind_speed} km/h`;
                document.getElementById('humidity').textContent = `${currentWeather.humidity}%`;
                document.getElementById('photo-suggestion').textContent = suggestion;
                
                document.getElementById('morning-golden-hour').textContent = 
                    `${formatTime(morningGoldenStart)} 至 ${formatTime(morningGoldenEnd)}`;
                document.getElementById('evening-golden-hour').textContent = 
                    `${formatTime(eveningGoldenStart)} 至 ${formatTime(eveningGoldenEnd)}`;
                
                // 生成未来天气预报
                const forecastContainer = document.getElementById('forecast-container');
                forecastContainer.innerHTML = '';
                
                // 生成未来5天的预报
                const dailyForecast = data.forecastData.results[0].daily;
                dailyForecast.forEach((day, index) => {
                    if (index >= 5) return; // 最多显示5天
                    
                    const forecastDate = new Date(day.date);
                    const dayIcon = weatherCodeMap[day.code_day] || 'wi-day-sunny';
                    
                    const forecastCard = document.createElement('div');
                    forecastCard.className = 'col-md-2 col-sm-4 col-6 mb-3 text-center';
                    forecastCard.innerHTML = `
                        <div class="card h-100">
                            <div class="card-body p-2">
                                <h6>${forecastDate.toLocaleDateString('zh-CN', { month: 'short', day: 'numeric' })}</h6>
                                <div class="my-2">
                                    <i class="wi ${dayIcon} display-6"></i>
                                </div>
                                <p class="mb-0">${day.text_day}</p>
                                <p class="mb-0">${day.high}°C / ${day.low}°C</p>
                            </div>
                        </div>
                    `;
                    
                    forecastContainer.appendChild(forecastCard);
                });
                
                // 显示结果
                document.getElementById('weather-result').classList.remove('d-none');
            })
            .catch(error => {
                console.error('获取天气数据失败:', error);
                document.getElementById('weather-loading').classList.add('d-none');
                document.getElementById('weather-error').classList.remove('d-none');
            });
    });
});